package com.ehome.poct.core.dao.mybatis;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ehome.mybatisplus.support.AbstractCrudRepository;
import com.ehome.paymentcenter.api.pay.constant.PayStatus;
import com.ehome.poct.core.api.dto.check.gold.TestReportPoctUniDTO;
import com.ehome.poct.core.api.dto.report.TestReportConfigDTO;
import com.ehome.poct.core.dao.entity.check.TestReportPoctUniDO;
import com.ehome.poct.core.dao.mybatis.mapper.TestReportPoctUniMapper;
import com.ehome.poct.core.repository.TestReportPoctUniRepository;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
 * 金标仪联合检测报告RepositoryImpl
 *
 * @author muqiu
 * @Date 2022-03-19 17:35
 */
@Repository
@AllArgsConstructor
public class TestReportPoctUniRepositoryImpl extends AbstractCrudRepository<TestReportPoctUniDO, TestReportPoctUniDTO> implements TestReportPoctUniRepository {
    private final TestReportPoctUniMapper mapper;

    @Override
    public void updateStatus(String orderNo, Integer status) {
        mapper.update(null, Wrappers.<TestReportPoctUniDO>lambdaUpdate()
                .eq(TestReportPoctUniDO::getPayOrderNo, orderNo).set(TestReportPoctUniDO::getPayStatus, status));
    }

    @Override
    public void delByOrderNo(String orderNo) {
        mapper.update(null, Wrappers.<TestReportPoctUniDO>lambdaUpdate()
                .eq(TestReportPoctUniDO::getPayOrderNo, orderNo)
                .set(TestReportPoctUniDO::getPayStatus, 30)
                .set(TestReportPoctUniDO::getUpdateTime, LocalDateTime.now()));
//        mapper.delete(Wrappers.<TestReportPoctUniDO>lambdaUpdate().eq(TestReportPoctUniDO::getPayOrderNo, orderNo));
    }

    @Override
    public void updateUniReportStatus(String orderNo) {
        mapper.update(null,Wrappers.<TestReportPoctUniDO>lambdaUpdate().set(TestReportPoctUniDO::getPayStatus, PayStatus.SUCCESS.getStatus()).eq(TestReportPoctUniDO::getPayOrderNo,orderNo));
    }

    @Override
    public List<TestReportPoctUniDTO> getUniReport(List<Long> longs) {
        return BeanUtil.copyToList(mapper.selectBatchIds(longs),TestReportPoctUniDTO.class);
    }

    @Override
    public void reportConfigJby(TestReportConfigDTO testReportConfigDTO) {
        if(testReportConfigDTO.getDisabled() == 0){
            mapper.reportConfigJby(testReportConfigDTO);
            mapper.delete(Wrappers.<TestReportPoctUniDO>lambdaQuery().eq(TestReportPoctUniDO::getClinicId,testReportConfigDTO.getClinicId())
                    .ge(testReportConfigDTO.getStartTime() != null,TestReportPoctUniDO::getCreateTime,testReportConfigDTO.getStartTime())
                    .le(testReportConfigDTO.getEndTime() != null,TestReportPoctUniDO::getCreateTime,testReportConfigDTO.getEndTime()));
        }else {
            mapper.reportConfigJby(testReportConfigDTO);
        }
    }

    @Override
    public void updateByOrderNo(String orderNo) {
        mapper.updateByOrderNo(orderNo);
    }

    @Override
    public TestReportPoctUniDTO getUnitReportByOrderNo(String orderNo, Integer stripeCodeA, Integer stripeCodeB) {
        QueryWrapper<TestReportPoctUniDO> queryWrapper = new QueryWrapper<TestReportPoctUniDO>();
        queryWrapper.lambda().eq(TestReportPoctUniDO::getPayOrderNo, orderNo)
                .eq(TestReportPoctUniDO::getStripTypeCodeA, stripeCodeA)
                .eq(TestReportPoctUniDO::getStripTypeCodeB, stripeCodeB);
        TestReportPoctUniDO poctUniDO = mapper.selectOne(queryWrapper);
        if (Objects.isNull(poctUniDO)) {
            return null;
        }
        return BeanUtil.copyProperties(poctUniDO, TestReportPoctUniDTO.class);
    }
}
